package ems.dev.easycode.util;

import cn.hutool.core.util.StrUtil;
import ems.dev.easycode.domain.entity.DomainEntity;

import java.util.List;

/**
 * @author 狠穿
 * @version 1.0.0
 * @date 2023/5/24
 * @function 封装Java包和windows操作系统上文件夹之间的转换操作
 */
public class PackageUtil {

    /**
     * 将Java包名转换成windows的文件路径
     * @param packageName
     * @return
     */
    public static String packageToDir(String packageName){
        return StrUtil.isBlank(packageName)? StrUtil.EMPTY : StrUtil.replace(packageName,StrUtil.DOT,"\\");
    }

    /**
     * 将windows的文件路径转换成Java包名
     * @param dir
     * @return
     */
    public static String dirToPackage(String dir){
        return StrUtil.isBlank(dir)? StrUtil.EMPTY : StrUtil.replace(dir,"\\",StrUtil.DOT);
    }

    /**
     * 获取模块名称
     * @return
     */
    public static String getModulePackage(){
        String projectPackage = PropertiesUtil.getProValueStr(Constant.EASY_CODE_PROPERTIES_FILE_NAME, Constant.EASYCODE_PROJECT_PACKAGE);
        String moduleName = PropertiesUtil.getProValueStr(Constant.EASY_CODE_PROPERTIES_FILE_NAME, Constant.EASYCODE_MODULE_NAME);
        return projectPackage +StrUtil.DOT+ moduleName;
    }

    /**
     * 获取最后一层包的包名全路径
     * @param packageName
     * @return
     */
    public static String getLastLevelPackage(String packageName){
        return getModulePackage() + StrUtil.DOT + packageName;
    }

    /**
     * 获取包名最后一部分
     * @param packageName
     * @return
     */
    public static String getPackageLastPart(String packageName){
        if(!StrUtil.contains(packageName,StrUtil.DOT)){
            return packageName;
        }
        List<String> split = StrUtil.split(packageName, StrUtil.DOT);
        return split.get(split.size()-1);
    }

    /**
     * 获取实体类的包名全路径
     */
    public static String getClassFullName(DomainEntity domain){
        return domain.getPackageName()+"."+domain.getName();
    }

}
